package la.iok.hzsvn.lewin.movie.shopmovie.service;

import la.iok.hzsvn.lewin.movie.core.Token;
import la.iok.hzsvn.lewin.movie.core.shopmovie.param.CouponDefinitionListParam;
import la.iok.hzsvn.lewin.movie.core.shopmovie.param.CouponDefinitionParam;
import la.iok.hzsvn.lewin.movie.core.shopmovie.vo.CouponDefinitionVo;
import la.iok.hzsvn.lewin.movie.shopmovie.entity.CouponDefinition;
import la.iok.hzsvn.lewin.mybatis.model.PageParam;
import la.iok.hzsvn.lewin.mybatis.model.PageVo;
import la.iok.hzsvn.lewin.mybatis.model.SortParam;
import la.iok.hzsvn.lewin.mybatis.service.BaseService;
import la.iok.hzsvn.share.annotations.NotNull;
import la.iok.hzsvn.share.annotations.Nullable;

public interface CouponDefinitionService extends BaseService<CouponDefinition, Long> {
    /**
     * 保存优惠卷定义.超级用户定义系统通用优惠卷.店铺管理员和店长定义店铺优惠卷
     * @param token 操作用户
     * @param param 优惠卷定义
     * @return 新增加记录id
     */
    Long save(@NotNull Token token, @NotNull CouponDefinitionParam param);

    /***
     * 修改优惠券定义
     * @param token 操作用户
     * @param id 优惠券定义id
     * @param param 参数
     */
    void modify(@NotNull Token token, @Nullable Long id, @NotNull CouponDefinitionParam param);

    /**
     * 删除指定优惠券
     * @param token 操作用户
     * @param id 优惠券定义id
     */
    void delete(@NotNull Token token, @Nullable Long id);

    /**
     * 分页查询优惠券定义
     * @param token 操作用户
     * @param pageParam 分页参数
     * @param sortParam 排序参数
     * @param listParam 列表参数
     * @return 分页对象
     */
    @NotNull
    PageVo<CouponDefinitionVo> page(@NotNull Token token, @NotNull PageParam pageParam, @NotNull SortParam sortParam,
                                    @NotNull CouponDefinitionListParam listParam);
}
